package br.com.admGearman.cadastro.apresentacao;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import br.com.admGearman.cadastro.negocio.EstLojaNgc;
import br.com.admGearman.cadastro.negocio.LojaNgc;
import br.com.admGearman.cadastro.vo.EstEmpresaVo;
import br.com.admGearman.cadastro.vo.EstLojaVo;
import br.com.admGearman.cadastro.vo.LojaVo;
import br.com.admGearman.cadastro.vo.filtro.FiltroLojaVo;
import br.com.admGearman.util.jsf.AbstractBean;
import br.com.admGearman.util.jsf.JSFUtil;
import br.com.r2.exception.R2Exception;
import br.com.r2.util.tipodado.Texto;

public class LojaBean extends AbstractBean<LojaVo, LojaNgc>
{

   JSFUtil jsfUtil = new JSFUtil();

   List<EstLojaVo> listaEstabelecimentos = new ArrayList<EstLojaVo>();

   List<LojaVo> listaLojas = new ArrayList<LojaVo>();
   
   public LojaBean()
   {
      super(LojaNgc.getInstancia());
      this.ACTION_SEARCH = "loja";
      this.pageTitle = "titulo_loja";
   }

   @Override
   public String preparaPesquisar()
   {
      try
      {
         this.getEntity().setFiltroVo(new FiltroLojaVo());
         
         // pegando todos os estabelecimentos da empresa para poder alterar - inicio
         EstEmpresaVo empresaVo = this.getEntity().getEstEmpresaVo();
         EstLojaVo estLojaVo = new EstLojaVo();
         estLojaVo.setEstEmpresaVo(new EstEmpresaVo());
         estLojaVo.getEstEmpresaVo().setCodigo(empresaVo.getCodigo());
         List<EstLojaVo> listaEstLojas = EstLojaNgc.getInstancia().pesquisar(estLojaVo, EstLojaNgc.JOIN_EMPRESA);
         
         EstLojaVo vazio = new EstLojaVo();
         vazio.setDescricao(new Texto("TODAS"));
         
         List<EstLojaVo> listaEstabelecimentos = new ArrayList<EstLojaVo>();
         listaEstabelecimentos.add(vazio);
         listaEstabelecimentos.addAll(listaEstLojas);
         
         this.setListaEstabelecimentos(listaEstabelecimentos);
         // pegando todos os estabelecimentos da empresa para poder alterar - fim

         // pegando todas as lojas da empresa para poder alterar - inicio
         LojaVo lojaVo = new LojaVo();
         lojaVo.setEstEmpresaVo(empresaVo);
         int join = LojaNgc.JOIN_EMPRESA | LojaNgc.JOIN_EST_LOJA;
         List<LojaVo> listaLojas = LojaNgc.getInstancia().pesquisar(lojaVo, join);
         
         this.setListaLojas(listaLojas);
         // pegando todas as lojas da empresa para poder alterar - fim
      }
      catch (R2Exception e)
      {
         FacesMessage message = new FacesMessage(e.getMensagem());  
         message.setSeverity(FacesMessage.SEVERITY_ERROR);  
         FacesContext.getCurrentInstance().addMessage("", message);
      }
      
      setCurrentState(STATE_INSERT);
      return ACTION_SEARCH;
   }

   public void alterar(ActionEvent event)
   {
      try
      {
         if (this.getListaLojas() != null && this.getListaLojas().size() > 0)
         {
            LojaNgc.getInstancia().alterar(this.getListaLojas());

            FacesContext.getCurrentInstance().addMessage(null, 
                  new FacesMessage(FacesMessage.SEVERITY_INFO, jsfUtil.getBundle().getString("itens.alterado.sucesso"), null));
         }
      }
      catch (R2Exception e)
      {
         FacesMessage message = new FacesMessage(e.getMensagem());
         message.setSeverity(FacesMessage.SEVERITY_ERROR);
         FacesContext.getCurrentInstance().addMessage("", message);
      }
   }
   
   public List<EstLojaVo> getListaEstabelecimentos()
   {
      return listaEstabelecimentos;
   }

   public void setListaEstabelecimentos(List<EstLojaVo> listaEstabelecimentos)
   {
      this.listaEstabelecimentos = listaEstabelecimentos;
   }

   public List<LojaVo> getListaLojas()
   {
      return listaLojas;
   }

   public void setListaLojas(List<LojaVo> listaLojas)
   {
      this.listaLojas = listaLojas;
   }
}
